package com.jd.threed.生产者消费者原理;

/**
 *
 */
public class StopThread implements Runnable{


    @Override
    public void run() {
        int count = 0;
        while (!Thread.currentThread().isInterrupted() && count < 1000) {
            System.out.println("count = " + count++);
        }
    }


    public static void main(String[] args) throws InterruptedException {
//        Thread thread = new Thread(new StopThread());
//        thread.start();
//        Thread.sleep(5);
//        thread.interrupt();


        Runnable runnable = () -> {
            int num = 0;
            try {
                while (!Thread.currentThread().isInterrupted() && num <= 1000) {
                    System.out.println(num);
                    num++;
                    Thread.sleep(1000000);
                }
            } catch (InterruptedException e) {
                e.printStackTrace();
            }
        };


        Thread thread = new Thread(runnable);


        thread.suspend();


        thread.start();

        Thread.sleep(5);

        thread.interrupt();

    }



    // 错误的停止方法
    // stop 直接停止线程，会丢失任务中执行的数据，导致数据完整性等问题
    // suspend 不会释放锁，就开始进入休眠，可能容易导致死锁，resume()之前，是不会被释放的。
    // 来，说一个死锁的过程，
    // 两个线程，A,B
    // A调用了suspend方法让B挂起，此时B 正好有一把锁来着，由于B还没有释放锁呢，就已经休眠 了，所以呢对于线程A而言，也拿不到锁，也会陷入阻塞，那么A,和B都进行不下去了

}
